#pragma once

#include <list>
#include "Pointer.h"
#include "Vector3D.h"
#include "HashedString.h"
#include "Combatant.h"

namespace Combat
{
	class Request
	{
	public:
		typedef std::list<Pointer<Request>> List_t;

		static const HashedString type;
		virtual const HashedString& Type();

		unsigned int ability;
		Pointer<Combatant> requester;
	};
	class TargettedRequest : public Request
	{
	public:
		static const HashedString type;
		const HashedString& Type();

		Pointer<Combatant> target;
	};
	class DirectionalRequest : public Request
	{
	public:
		static const HashedString type;

		const HashedString& Type();

		Maths::Vector3D direction;
	};
};